<?xml version="1.0" encoding="utf-8"?>
<!--
                                                                                     
 h       t     t                ::       /     /                     t             / 
 h       t     t                ::      //    //                     t            // 
 h     ttttt ttttt ppppp sssss         //    //  y   y       sssss ttttt         //  
 hhhh    t     t   p   p s            //    //   y   y       s       t          //   
 h  hh   t     t   ppppp sssss       //    //    yyyyy       sssss   t         //    
 h   h   t     t   p         s  ::   /     /         y  ..       s   t    ..   /     
 h   h   t     t   p     sssss  ::   /     /     yyyyy  ..   sssss   t    ..   /     
                                                                                     
	<https://y.st./>
	Copyright © 2016 Alex Yst <mailto:copyright@y.st>

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program. If not, see <https://www.gnu.org./licenses/>.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<base href="https://y.st./en/weblog/2016/01-January/19.xhtml" />
		<title>Unicorns Get More Bacon &lt;https://y.st./en/weblog/2016/01-January/19.xhtml&gt;</title>
		<link rel="icon" type="image/png" href="/link/CC_BY-SA_4.0/y.st./icon.png" />
		<link rel="stylesheet" type="text/css" href="/link/basic.css" />
		<link rel="stylesheet" type="text/css" href="/link/site-specific.css" />
		<script type="text/javascript" src="/script/javascript.js" />
		<meta name="viewport" content="width=device-width" />
	</head>
	<body>
		<nav>
			<p>
				<a href="/en/">Home</a> |
				<a href="/en/a/about.xhtml">About</a> |
				<a href="/en/a/contact.xhtml">Contact</a> |
				<a href="/a/canary.txt">Canary</a> |
				<a href="/en/URI_research/"><abbr title="Uniform Resource Identifier">URI</abbr> research</a> |
				<a href="/en/opinion/">Opinions</a> |
				<a href="/en/coursework/">Coursework</a> |
				<a href="/en/law/">Law</a> |
				<a href="/en/a/links.xhtml">Links</a> |
				<a href="/en/weblog/2016/01-January/19.xhtml.asc">{this page}.asc</a>
			</p>
			<hr/>
			<p>
				Weblog index:
				<a href="/en/weblog/"><abbr title="American Standard Code for Information Interchange">ASCII</abbr> calendars</a> |
				<a href="/en/weblog/index_ol_ascending.xhtml">Ascending list</a> |
				<a href="/en/weblog/index_ol_descending.xhtml">Descending list</a>
			</p>
			<hr/>
			<p>
				Jump to entry:
				<a href="/en/weblog/2015/03-March/07.xhtml">&lt;&lt;First</a>
				<a rel="prev" href="/en/weblog/2016/01-January/18.xhtml">&lt;Previous</a>
				<a rel="next" href="/en/weblog/2016/01-January/20.xhtml">Next&gt;</a>
				<a href="/en/weblog/latest.xhtml">Latest&gt;&gt;</a>
			</p>
			<hr/>
		</nav>
		<header>
			<h1>Unicorns Get More Bacon</h1>
			<p>Day 00318: Tuesday, 2016 January 19</p>
		</header>
<p>
	I thought that my old school still has not written back to me about resetting my password, but their live chat option is now actually functioning.
	I was able to speak with someone that changed the email address on my account to my current email address, but password resetting still does not work.
	He recommended that I contact a different section of the support team, so I have now sent an email to them.
	Hopefully they will actually respond.
	However, later in the day, I started trying to retame my inbox.
	I have allowed myself to get quite behind in processing email.
	While it is true that some support departments have not been responding to me, it turns out that one section of the school&apos;s support team did get back to me.
	Embarassingly, they got back to me as early as the first of this month.
	They wanted some personal information in order to verify that I am the real account holder, so now that i have sent that, hopefully I should be able to get back into my account soon.
</p>
<p>
	My onion spider has crashed again.
	It turns out that there was an error both in the spider itself and in include.d.
	The error in the spider causes it to neglect to check the output of <code>merge_uris()</code>.
	<code>merge_uris()</code> outputs a string if <code>\parse_url()</code> is able to handle the relative <abbr title="Uniform Resource Identifier">URI</abbr> passed to <code>merge_uris()</code>, but if <code>\parse_url()</code> outputs a boolean false, so does <code>merge_uris()</code>.
	The spider assumes that output will be a string, even though <code>merge_uris()</code> is explicitly programmed to sometimes output false.
	The error in <code>merge_uris()</code> caused it to output a boolean false if <code>\parse_url()</code> outputs an empty array, which it apparently does when given the string &quot;#&quot;, which appears as the target of a hyperlink on the page that my spider choked on.
	Thankfully, the hyperlink that my spider choked on was not on the huge website that it has been stuck repeatedly crawling over the past week or so.
	It has finished crawling that website, so it will now leave that website alone for at least a month.
	I fixed the bug in include.d, but I felt that the bug in the spider was too useful for the time being to fix yet.
	I do not know of any situation in which <code>\parse_url()</code> actually returns a boolean false, so until the spider or I run into such a case, the bug in the spider helps be debug include.d.
</p>
<p>
	Marc With a C has a new album available for prerelease order: <a href="https://marcwithac.bandcamp.com/album/unicorns-get-more-bacon">Unicorns Get More Bacon</a>.
	I cannot say that I like the title of the album, but I usually like his music, and he said that early adopters might get an unspecified bonus, so I tried to order the album.
	After all, I will probably buy it later anyway.
	However, PayPal is once again being a pain and refusing to process my payment.
	Once more, I have begun pestering PayPal support about their issues publicly on Twitter.
	Trying again later, the payment went through, though I am curious as to how PayPal will respond to my complaint.
	Strangely, the PayPal website said that it was only charging me $10 <abbr title="United States Dollars">USD</abbr> instead of $13 <abbr title="United States Dollars">USD</abbr> at first, but then it corrected itself to $ <abbr title="United States Dollars">USD</abbr>.
	After placing the order, Bandcamp instantly added the album to <a href="https://bandcamp.com/y_st">my collection</a>, but then Marc gave me a code to download it early, and using the code added it to my collection a second time, so I now have two of it, just like I have two of Professor Shyguy&apos;s <a href="https://professorshyguy.bandcamp.com/album/fragmentation">Fragmentation</a>.
</p>
<p>
	While writing the part of my debugging code that loads all of include.d&apos;s classes, functions, and constants, I found an oddity in the <a href="https://secure.php.net/manual/en/function.class-exists.php"><code>\class_exists()</code> function</a>.
	In the past, it returned true if the class name checked corresponded to an existing regular class or an interface, but was later modified to only return true if the class name checked corresponds to a non-interface class and a new <a href="https://secure.php.net/manual/en/function.interface-exists.php"><code>\interface_exists()</code> function</a> was added to check for the existence of an interface.
	What was even the point of that? Interfaces and non-interface classes exist within the same name space.
	There is no need to check a different name space, so there is no need for a second function to check it.
	When traits were added, a new <a href="https://secure.php.net/manual/en/function.trait-exists.php"><code>\trait_exists()</code> function</a> was added, and <code>\class_exists()</code> only returns true if the class name corresponds to an existing, non-trait, non-interface class.
	As best as I can figure, as all of these things are in the same name space, these functions first check to see if the name is being used, then check to see what type of class is using it.
	But what if we just want to know if the name is in use? There seems to be quite literally no function that meets this basic need, so we have to instead check the output of all three functions.
	That means that the name is checked for use three times when we only need to know about one name!
</p>
<p>
	My <a href="/a/canary.txt">canary</a> still sings the tune of freedom and transparency.
</p>
		<hr/>
		<p>
			Copyright © 2016 Alex Yst;
			You may modify and/or redistribute this document under the terms of the <a rel="license" href="/license/gpl-3.0-standalone.xhtml"><abbr title="GNU&apos;s Not Unix">GNU</abbr> <abbr title="General Public License version Three or later">GPLv3+</abbr></a>.
			If for some reason you would prefer to modify and/or distribute this document under other free copyleft terms, please ask me via email.
			My address is in the source comments near the top of this document.
			This license also applies to embedded content such as images.
			For more information on that, see <a href="/en/a/licensing.xhtml">licensing</a>.
		</p>
		<p>
			<abbr title="World Wide Web Consortium">W3C</abbr> standards are important.
			This document conforms to the <a href="https://validator.w3.org./nu/?doc=https%3A%2F%2Fy.st.%2Fen%2Fweblog%2F2016%2F01-January%2F19.xhtml"><abbr title="Extensible Hypertext Markup Language">XHTML</abbr> 5.1</a> specification and uses style sheets that conform to the <a href="http://jigsaw.w3.org./css-validator/validator?uri=https%3A%2F%2Fy.st.%2Fen%2Fweblog%2F2016%2F01-January%2F19.xhtml"><abbr title="Cascading Style Sheets">CSS</abbr>3</a> specification.
		</p>
	</body>
</html>

